<?php
// 应用公共文件

if ( !function_exists('success') ){
    function success($msg='操作成功', $code=1, $data=''){
        exit(json_encode(array('code'=>$code, 'msg'=>$msg, 'data'=>$data)));
    }
}


if ( !function_exists('error') ){
    function error($msg='操作失败', $code=2, $data=''){
        exit(json_encode(array('code'=>$code, 'msg'=>$msg, 'data'=>$data)));
    }
}

if ( !function_exists('sha1_password') ){
    /**
     * 对密码进行加密
     * @param $password
     * @return string
     */
    function sha1_password($password){
        return sha1($password . 'WeChat:18605586543');
    }
}


// 操作日志
function createLog($action = 'NULL')
{
    $data = array(
        'username'      => session('?admin.username') ? session('admin.username') : '',
        'action'        => $action,
        'ip'            => $_SERVER["REMOTE_ADDR"],
    );
    \app\common\model\Logs::create($data);
}


if ( !function_exists('fission') ){
    /**
     * 获取配置项
     * @param string $name 配置项的name值
     * @param string $showAll 是否显示配置项的全部信息
     * @return array|false|mixed|PDOStatement|string|\think\Model|null
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    function fission($name='', $showAll='')
    {
        if ( $name ){

            //获取单个配置项, 如果$showAll为真, 显示此配置项的全部信息, 否则只显示value值
            $conf = \app\common\model\Configs::where(['status'=>1, 'name'=>$name])->find();
            if ($conf){
                return $showAll ? $conf : $conf['value'];
            } else {
                return false;
            }

        } else {

            //获取全部配置
            $confAll = \app\common\model\Configs::field('name,value')->where(['status'=>1])->select();

            if ($confAll){

                //数据整理成一维数组
                $data = [];
                foreach ($confAll as $k=>$v){
                    $data[$v['name']] = trim($v['value']);
                }

                return $data;

            } else {
                return false;
            }
        }
    }
}


if (!function_exists('getRandStr')) {
    /**
     * 获取随机字符串
     * @param int $len 长度
     * @param int $type 生成的字符串类型，1:全小写字母；2:全大写字母；3:全数字；4:大写+小写+数字；5:大写+小写；6:小写+数字；7:大写+数字；其他:小写+数字；
     * @return string
     */
    function getRandStr($len=6, $type=1)
    {

        switch ($type){
            case 1:
                $chars = range('a', 'z');
                break;
            case 2:
                $chars = range('A', 'Z');
                break;
            case 3:
                $chars = range('0', '9');
                break;
            case 4:
                $chars = array_merge(range('a', 'z'), range('A', 'Z'), range('0', '9'));
                break;
            case 5:
                $chars = array_merge(range('a', 'z'), range('A', 'Z'));
                break;
            case 6:
                $chars = array_merge(range('a', 'z'), range('0', '9'));
                break;
            case 7:
                $chars = array_merge(range('A', 'Z'), range('0', '9'));
                break;
            default:
                $chars = array_merge(range('a', 'z'), range('0', '9'));
        }

        $charsLen = count($chars) - 1;
        shuffle($chars);
        $output = '';
        for ($i = 0; $i < $len; $i++) {
            $output .= $chars[mt_rand(0, $charsLen)];
        }
        return $output;
    }
}

if (!function_exists('getRandArray')){

    /**
     * 数组随机获取N个值
     * @param array $arr
     * @param int $num
     * @return array|bool
     */
    function getRandArray($arr=[], $num=1)
    {
        if ( count($arr)<1 || $num < 1 ){
            return false;
        }

        //根据数组的数量，创建一个新的临时数组，并乱序,新临时数组的值，当作原数组的key
        $randArr = [];
        for ( $i = 0; $i < count($arr); $i++ ){
            $randArr[] = $i;
        }
        shuffle($randArr);

        //如果需要返回的数组数量大于原数组的数量，返回最大数量
        if ($num > count($arr)){
            $num = count($arr);
        }

        //创建一个返回的数组
        $reArr = [];
        for ( $x = 0; $x < $num; $x++ ){
            $reArr[] = $arr[$randArr[$x]];
        }
        return $reArr;
    }
}



if ( !function_exists('trimAll') ){

    /**
     * 去掉字符串或者数组里字符串两边的空格
     * @param $data
     * @return array|string
     */
    function trimAll($data=''){
        if ( is_string($data) ){
            return trim($data);
        }

        if ( is_array($data) ){
            foreach ( $data as $k=>$v ){
                if ( is_array($v) ) {
                    $data[$k] = trimAll($v);
                } else {
                    $data[$k] = trim($v);
                }
            }
            return $data;
        }
        return false;
    }
}



if ( !function_exists('zhuanhuan') ){

    /**
     * 泛域名相互转换 abc123.domain.com <==> *.domain.com
     * @param string $domain
     * @return mixed|string
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    function zhuanhuan($domain ='')
    {

        if ( !$domain ){
            $domain = $_SERVER['HTTP_HOST'];
        }

        // 如果是 * 开头 就转换成 随机的二级域名
        // 判断 . 出现的位置
        $chuxian = stripos($domain, '.');

        //截取从0到.之间的字符串
        $search = substr($domain, 0, $chuxian);

        if ( $search == '*'){

            // 把 * 替换成 随机的二级域名
            $domain = str_replace('*', getRandStr(fission('fanyuming_num')), $domain);

        } else {

            //把 截取到的内容, 替换成 * 并返回
            $domain = str_replace($search, '*', $domain);
        }

        return $domain;
    }

}


if ( !function_exists('huanhangToStr') ){
    /**
     * 换行 转换成 字符串
     * @param string $str
     * @return array|bool|string
     */
    function huanhangToStr($str='')
    {
        if ( !$str ) return false;

        // 把换行，替换成|
        $str_str = str_replace(PHP_EOL, '||', $str);

        //把字符串转换成数组
        $strtoarray = explode('||', $str_str);

        //整理array
        $strtoarray = array_filter(trimAll($strtoarray));

        //把数组转换成字符串
        return implode('||', $strtoarray);
    }

}




